package uno.component;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JPanel;

import uno.net.UnoPlayer;
import uno.utilities.URNResolver;

public class HandOfCard extends JPanel {


	/**
	 * numero di carte da cui e' composto
	 * l'hoc iniziale
	 * */
	public static final short INITIAL_CARDS_NUMBER = 8;
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -572575284504982414L;
	/**
	 * */
	private ArrayList<Card> cardsList;
	
	/**
	 * Contenitore grafico dell'oggetto.
	 */
	private UnoPlayer owner;
	
	public HandOfCard(UnoPlayer owner) {
		this.owner = owner;
		cardsList = new ArrayList<Card>();
		FlowLayout fl = new FlowLayout();
		fl.setHgap(-50);
		fl.setVgap(0);
		setOpaque(false);
		setLayout(fl);
	}

	//Aggiunge una carta al mazzo del giocatore
	public void addCard(Card card) { 
		cardsList.add(card);
		add(card);
		revalidate();
	}


	public Dimension getPreferredSize() {
		int width = 400;
		int height = 200;
		return new Dimension(width,height);
	}

	//rimuove una carta dal mazzo del giorcatore
	public void removeCard(Card card) {
		cardsList.remove(card);
		remove(card);
		revalidate();
	}
	
	
	/**
	 * Ritorna il contenitore grafico
	 * */
	public UnoPlayer getOwner() {
		return owner;
	}

	/**
	 * ritorna la mano sotto forma di lista di urn.
	 * */
	public ArrayList<String> toURNList(){
		ArrayList<String> urnList = new ArrayList<String>();
		for(Iterator<Card> i = cardsList.iterator(); i.hasNext(); ){
			String currentUrn = URNResolver.cardToURN(i.next());
			urnList.add(currentUrn);			
		}		
		return urnList;
	}

	/**
	 * abilita o disabilita il click sulle carte
	 * */
	public void setEnableClickListener(boolean flag){
	//	System.out.println("abilito/disabilito la mano a seconda di flag = "+ flag);
	//	System.out.println("dimensione della mano " + cardsList.size());
		for(Iterator<Card> i = cardsList.iterator(); i.hasNext(); ) {
			i.next().enableClickCardListener(flag);
			// boolean tmp = i.next().enableClickCardListener(flag);
			// System.out.println("listener abilitati " + tmp);
		}
		
	}
	
	/**
	 * Ritorna il numero di carte contenuto nella mano
	 * */
	public int getHOCSize() {
		
		return cardsList.size();
		
	}
	
	//per ora non serve a niente.. non so se servira' mai..
	//public void updateHand() {}

}
